﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using CasaShowDados;
using System.Configuration;
using System.Data.SqlClient;

namespace CasaShow {
  public partial class CadastroUsuarios : System.Web.UI.Page {

    protected void Page_Load(object sender, EventArgs e) {
      if (!Page.IsPostBack) {
        PopulaUsuarioGV();
      }
    }

    #region Usuario detailView

    protected void UsuarioDV_DataBound(object sender, EventArgs e) {
      int id = 0;
      if (UsuarioDV.DataKey.Value != null)
        id = Convert.ToInt32(UsuarioDV.DataKey[0].ToString());

      DataTable u = new DataTable();
      AcessoBanco.StringConexao = ConfigurationManager.ConnectionStrings["Show"].ConnectionString;
      u = (AcessoBanco.ConsultarUsuario(id)).Tables["Table"];

      ((DropDownList)UsuarioDV.FindControl("PerfilDdl")).DataSource = Enum.GetNames(typeof(Enumeradores.EnumTipoPerfil));
      ((DropDownList)UsuarioDV.FindControl("PerfilDdl")).DataBind();
      if (u != null && UsuarioDV.DataKey.Value != null) {
        ((DropDownList)UsuarioDV.FindControl("PerfilDdl")).SelectedIndex = Convert.ToInt32(u.Rows[0]["ID_PERFIL"]);
      }
    }

    #endregion

    #region Usuario gridView

    protected void UsuarioGV_RowDataBound(object sender, GridViewRowEventArgs e) {

    }

    protected void UsuarioGV_PageIndexChanging(object sender, GridViewPageEventArgs e) {
      PopulaUsuarioGV();
      UsuarioGV.PageIndex = e.NewPageIndex;
      UsuarioGV.DataBind();
    }

    protected void UsuarioGV_PreRender(object sender, EventArgs e) {
      if (UsuarioGV.BottomPagerRow != null) {
        ((Label)UsuarioGV.BottomPagerRow.FindControl("PaginaAtualLbl")).Text = (UsuarioGV.PageIndex + 1).ToString() + " de " + UsuarioGV.PageCount.ToString() +
          " (Total de Registros: " + ViewState["totalPeriodos"] + ")";
        ((ImageButton)UsuarioGV.BottomPagerRow.FindControl("FirstBtn")).Visible =
        ((ImageButton)UsuarioGV.BottomPagerRow.FindControl("PreviousBtn")).Visible = UsuarioGV.PageIndex != 0;
        ((ImageButton)UsuarioGV.BottomPagerRow.FindControl("NextBtn")).Visible =
        ((ImageButton)UsuarioGV.BottomPagerRow.FindControl("LastBtn")).Visible = UsuarioGV.PageCount != (UsuarioGV.PageIndex + 1);
      }
    }

    protected void UsuarioGV_RowDeleting(object sender, GridViewDeleteEventArgs e) {
      int id = Convert.ToInt32(UsuarioGV.DataKeys[e.RowIndex].Value.ToString());

      List<Usuario> usuario = new List<Usuario>();
      Usuario x = new Usuario();
      x.CodigoUsuario = id;
      x.DataCadastro = DateTime.Now;
      x.Acao = Enumeradores.EnumAcaoXML.Excluir;
      usuario.Add(x);

      AcessoBanco.StringConexao = (ConfigurationManager.ConnectionStrings["Show"].ConnectionString);
      AcessoBanco.CadastrarUsuario(usuario);
      PopulaUsuarioGV();

    }

    protected void UsuarioGV_RowEditing(object sender, GridViewEditEventArgs e) {
      int id = Convert.ToInt32(UsuarioGV.DataKeys[e.NewEditIndex].Value.ToString());
      IdUsuarioHF.Value = id.ToString();
      PopulaUsuarioDV(id);
    }

    #endregion

    #region Métodos

    private void PopulaUsuarioGV() {
      DataSet usuario = new DataSet();
      AcessoBanco.StringConexao = ConfigurationManager.ConnectionStrings["Show"].ConnectionString;
      usuario = AcessoBanco.ConsultarUsuario();
      if (usuario.Tables["Table"].Rows.Count > 0) {
        UsuarioGV.DataSource = usuario.Tables["Table"];

      }
      UsuarioGV.DataBind();
    }

    private void PopulaUsuarioDV(int id) {
      IdUsuarioHF.Value = id.ToString();
      DataSet usuario = new DataSet();
      AcessoBanco.StringConexao = ConfigurationManager.ConnectionStrings["Show"].ConnectionString;
      usuario = AcessoBanco.ConsultarUsuario(id);
      if (usuario.Tables["Table"].Rows.Count > 0) {
        UsuarioDV.ChangeMode(DetailsViewMode.Edit);
        MostraDetailsView();
        UsuarioDV.DataSource = usuario.Tables["Table"];
        UsuarioDV.DataBind();
      }
    }

    private void MostraDetailsView() {
      if (UsuarioDV.Visible == false) {
        UsuarioDV.Visible = true;
      }
      SalvarBtn.Visible = true;
      NovoBtn.Visible = UsuarioGV.Visible = false;
    }

    private void MostraGridVies() {
      if (UsuarioDV.Visible == true) {
        UsuarioDV.Visible = false;
      }
      SalvarBtn.Visible = false;
      NovoBtn.Visible = UsuarioGV.Visible = true;
      PopulaUsuarioGV();
    }

    private List<Usuario> ConverterTabelaEmLista(DataTable dataTable) {
      List<Usuario> resultado = null;
      Usuario u = new Usuario();
      if (dataTable.Rows.Count > 0) {
        resultado = new List<Usuario>();
        for (int i = 0; i < dataTable.Rows.Count; i++) {
          resultado.Add(u);
          resultado[i].Acao = Enumeradores.EnumAcaoXML.Alterar;
          resultado[i].CodigoCPF = Convert.ToString(dataTable.Rows[i]["CD_CPF"]);
          resultado[i].CodigoUsuario = Convert.ToInt32(dataTable.Rows[i]["ID_USUARIO"]);
          resultado[i].DataCadastro = Convert.ToDateTime(dataTable.Rows[i]["DT_CADASTRO"]);
          resultado[i].EmailUsuario = Convert.ToString(dataTable.Rows[i]["NM_EMAIL"]);
          resultado[i].LoginUsuario = Convert.ToString(dataTable.Rows[i]["NM_LOGIN"]);
          resultado[i].NomeUsuario = Convert.ToString(dataTable.Rows[i]["NM_USUARIO"]);
          resultado[i].Perfil = RetornaPerfil(Convert.ToInt32(dataTable.Rows[i]["ID_PERFIL"]));
          resultado[i].SenhaUsuario = Convert.ToString(dataTable.Rows[i]["NM_SENHA"]);
          resultado[i].Telefone = Convert.ToString(dataTable.Rows[i]["CD_TELEFONE"]);
          resultado[i].UsuarioDisponivel = Convert.ToBoolean(dataTable.Rows[i]["IC_USUARIO_DISPONIVEL"]);
        }
      }

      return resultado;
    }

    private Enumeradores.EnumTipoPerfil RetornaPerfil(int p) {
      Enumeradores.EnumTipoPerfil resultado = 0;
      switch (p) {
        case 1:
          resultado = Enumeradores.EnumTipoPerfil.Administrador;
          break;
        case 2:
          resultado = Enumeradores.EnumTipoPerfil.Gerente;
          break;
        case 3:
          resultado = Enumeradores.EnumTipoPerfil.Garcom;
          break;
        case 4:
          resultado = Enumeradores.EnumTipoPerfil.Atendente;
          break;
        case 5:
          resultado = Enumeradores.EnumTipoPerfil.Caixa;
          break;
        case 6:
          resultado = Enumeradores.EnumTipoPerfil.Cliente;
          break;
        default:
          resultado = Enumeradores.EnumTipoPerfil.Nenhum;
          break;
      }
      return resultado;
    }

    private List<Usuario> ObterDadosDetailsView() {
      List<Usuario> resultado = new List<Usuario>();
      Usuario temp = new Usuario();

      temp.Acao = Enumeradores.EnumAcaoXML.Incluir;
      temp.CodigoCPF = Convert.ToString(((TextBox)UsuarioDV.FindControl("cpfTxt")).Text);
      temp.DataCadastro = DateTime.Now;
      temp.EmailUsuario = ((TextBox)UsuarioDV.FindControl("EmailTxt")).Text;
      temp.LoginUsuario = ((TextBox)UsuarioDV.FindControl("LoginTxt")).Text;
      temp.NomeUsuario = ((TextBox)UsuarioDV.FindControl("NomeUsuarioTxt")).Text;
      temp.Perfil = RetornaPerfil(Convert.ToInt32(((DropDownList)UsuarioDV.FindControl("PerfilDdl")).SelectedIndex));
      temp.SenhaUsuario = "123456";
      temp.Telefone = ((TextBox)UsuarioDV.FindControl("TelefoneTxt")).Text;
      temp.UsuarioDisponivel = true;

      resultado.Add(temp);

      return resultado;
    }

    #endregion

    #region Botões

    protected void NovoBtn_Click(object sender, ImageClickEventArgs e) {
      UsuarioDV.ChangeMode(DetailsViewMode.Insert);
      MostraDetailsView();
    }

    protected void VoltarBtn_Click(object sender, ImageClickEventArgs e) {
      UsuarioDV.ChangeMode(DetailsViewMode.Edit);
      if (UsuarioDV.Visible == true) {
        UsuarioDV.Visible = false;
      }
      SalvarBtn.Visible = false;
      NovoBtn.Visible = UsuarioGV.Visible = true;
      IdUsuarioHF.Value = null;
      InfoLbl.Visible = false;
    }

    protected void SalvarBtn_Click(object sender, ImageClickEventArgs e) {
      try {
        AcessoBanco.StringConexao = ConfigurationManager.ConnectionStrings["Show"].ConnectionString;
        List<Usuario> usuarioLista = null;

        if (UsuarioDV.CurrentMode == DetailsViewMode.Edit) {
          DataSet usuario = new DataSet();
          int id = Convert.ToInt32(IdUsuarioHF.Value);
          usuario = AcessoBanco.ConsultarUsuario(id);
          usuarioLista = ConverterTabelaEmLista(usuario.Tables["Table"]);
        }
        usuarioLista = ObterDadosDetailsView();

        if (UsuarioDV.CurrentMode == DetailsViewMode.Edit) {
          usuarioLista[0].Acao = Enumeradores.EnumAcaoXML.Alterar;
          usuarioLista[0].CodigoUsuario = Convert.ToInt32(IdUsuarioHF.Value);
        }
        else if (UsuarioDV.CurrentMode == DetailsViewMode.Insert)
          usuarioLista[0].Acao = Enumeradores.EnumAcaoXML.Incluir;

        AcessoBanco.CadastrarUsuario(usuarioLista);
        MostraGridVies();
      }
      catch (Exception ex) {
        InfoLbl.Text = ex.Message;
        InfoLbl.Visible = true;
      }
    }

    #endregion

  }
}
